package com.web.basic.service;

import java.util.List;
import java.util.Map;
import com.web.common.basic.elasticsearch.entity.ElasticIndexParam;
import com.web.common.basic.elasticsearch.entity.ElasticIndices;
import com.web.common.basic.elasticsearch.entity.ElasticParam;
import com.web.common.basic.entity.SimplePage;
import com.web.common.basic.elasticsearch.entity.ElasticDataListParam;
import com.web.common.result.R;

public interface ElasticsearchService {
	
	/**
	 * 自定义操作
	 * @param param 请求的操作信息
	 * @return R<Object> 处理结果
	 *
	 * @author zhouhui
	 * @since 2023.10.24 
	 */
	R<Object> customOperate(ElasticParam param);

	/**
	 * 获取所有的索引
	 * @return R<List<String>> 索引列表
	 *
	 * @author zhouhui
	 * @since 2023.07.01
	 */
	R<List<ElasticIndices>> getIndexList();
	
	/**
	 * 获取索引信息
	 * @param param 索引名称
	 * @return R<Map<String, Object>> 处理结果
	 *
	 * @author zhouhui
	 * @since 2023.11.01 
	 */
	R<Map<String, Object>> getIndex(ElasticIndexParam param);
	
	/**
	 * 创建索引
	 * @param index 索引名称
	 * @return R<Object> 处理结果
	 *
	 * @author zhouhui
	 * @since 2023.07.01
	 */
	R<Object> createIndex(ElasticIndexParam param);
	
	/**
	 * 更新索引的mapping（不能进行字段的修改、删除，只能进行新增）
	 * @param param 更新的信息
	 * @return R<Object> 处理结果
	 *
	 * @author zhouhui
	 * @since 2023.11.01 
	 */
	R<Object> updateIndexMapping(ElasticIndexParam param);
	
	
	/**
	 * 定期删除日志信息
	 * @return R<Object>处理结果
	 *
	 * @author zhouhui
	 * @since 2023.08.16 
	 */
	R<Object> periodicDeleteLog();
	
	/**
	 * 获取对应索引存储的数据量
	 * @param param 查询参数
	 * @return Integer 数据行数
	 *
	 * @author zhouhui
	 * @since 2023.11.03 
	 */
	R<Integer> getIndexCount(ElasticIndexParam param);
	
	/**
	 * 删除索引信息，如果已经存储数据则不允许通过此方法进行删除。
	 * @param param
	 * @return
	 *
	 * @author zhouhui
	 * @since 2023.11.03 
	 */
	R<Object> deleteIndex(ElasticIndexParam param);
	
	/**
	 * @param param
	 * @return
	 *
	 * @author zhouhui
	 * @since 2024.04.26 
	 */
	R<SimplePage> getDataList(ElasticDataListParam param);
}
